home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / win_os2.swg / 0005_Window painting.pas < prev    next >
Pascal/Delphi Source File  |  1993-08-27  |  3KB  |  97 lines

  1. {
  2. michael a vincze
  3.  
  4. Below I have re-written your Paint method.  It is commented where I made the
  5. changes. Get in touch with me if you have any questions.
  6. }
  7.  
  8. procedure TNumConWindow.Paint(PaintDC : HDC; var PaintInfo : TPaintStruct);
  9. var
  10.   X, Y    : Integer;
  11.   WRect   : TRect;
  12.   DeltaX,
  13.   DeltaY,
  14.   XSize,
  15.   YSize   : Integer;
  16.   Perc    : Real;
  17.   Str     : string;
  18.   PC      : PChar;
  19.   PCP     : Integer;
  20.   SaveBK  : LongInt;
  21.   ThePen  : HPen;
  22.   TheBrush: HBrush;
  23.   TheRect : TRect;
  24.  
  25. const
  26.   CP       = 1;
  27.   NumLic   = 64;
  28.   MaxCount = 6;
  29.   Count    : array [1..MaxCount] of Integer = (2, 4, 8, 16, 32, 64);
  30.   OutStr   : string = 'Hello Allen E. Stoner ';
  31.  
  32. begin
  33.   GetClientRect(HWindow, WRect);
  34.   XSize := WRect.Right - WRect.Left;
  35.   YSize := WRect.Bottom - WRect.Top - 40;
  36.  
  37.   Perc   := YSize / (NumLic * 1.05);
  38.   DeltaY := Round(Perc * 10);
  39.  
  40.   { Draw fat line at bottom of graph.  The color is the system default. }
  41.   MoveTo(PaintDC, 0, YSize);
  42.   LineTo(PaintDC, XSize, YSize);
  43.   MoveTo(PaintDC, 0, YSize + 1);
  44.   LineTo(PaintDC, XSize, YSize + 1);
  45.   MoveTo(PaintDC, 0, YSize + 2);
  46.   LineTo(PaintDC, XSize, YSize + 2);
  47.  
  48.   { Draw horizontal lines.  The color is the system default. }
  49.   Y := YSize;
  50.   while Y > 0 do
  51.   begin
  52.     Rectangle(PaintDC, 0, Y, XSize, Y - DeltaY);
  53.     Y := Y - (DeltaY * 2);
  54.   end;
  55.  
  56.   { Fill in rectangle at bottom yellow.  This is the same size as WRect
  57.     except the top is at YSize + 3. }
  58.   TheBrush := CreateSolidBrush(RGB($FF, $FF, $00));
  59.   CopyRect(TheRect, WRect);
  60.   TheRect.Top := YSize + 3;
  61.   FillRect(PaintDC, TheRect, TheBrush);
  62.  
  63.   { Draw vertical lines red. If you wanted to, you could draw rectangles
  64.     instead of lines. Notice how I've selected a width of 4 for ThePen.
  65.     You could also have a different color for each "bar" by having X index
  66.     into an array of TColorRefs and changing ThePen for each new value of X.}
  67.   ThePen := CreatePen(PS_SOLID, 4, RGB($FF, $00, $00));
  68.   SelectObject(PaintDC, ThePen);
  69.   for X := 1 to MaxCount do
  70.   begin
  71.     MoveTo(PaintDC, X * 10, YSize);
  72.     LineTo(PaintDC, X * 10, Round(YSize - (Count[X] * Perc)));
  73.   end;
  74.  
  75.   if CP = 1 then
  76.     PCP := 300
  77.   else
  78.     PCP := CP - 1;
  79.   PC := @OutStr[1];
  80.  
  81.   { Set the color of the text.  Note GetSysColor is used merely as an example.
  82.     Don't forget that the background of the text must also be colored.  This
  83.     color should be yellow, as in TheBrush, however a different color was
  84.     selected for illustration purposes.  Alternatively SetBkMode() could
  85.     be used }
  86.   SetTextColor(PaintDC, GetSysColor(COLOR_HIGHLIGHT));
  87.   SetBkColor(PaintDC, RGB($00, $FF, $FF));
  88.   { Use SetBkMode () instead of SetBkColor () to see what happens.
  89.     SetBkMode (PaintDC, TRANSPARENT); }
  90.  
  91.   TextOut(PaintDC, 10, YSize+15, PC, Length(OutStr)-1);
  92.  
  93.   { Don't forget to delete the selected objects. }
  94.   DeleteObject(ThePen);
  95.   DeleteObject(TheBrush);
  96. end;
  97.